Omanda MQTT protokoll asjade interneti jaoks Pythoniga. See põhjalik juhend käsitleb põhimõtteid, Paho-MQTT teeki, turvalisust ja reaalmaailma projektide rakendamist.
Python asjade interneti jaoks: Põhjalik juhend MQTT rakendamiseks
Ühendatud maailm: Miks asjade interneti protokollid on olulised
Elame enneolematu ühenduvuse ajastul. Asjade internet (IoT) ei ole enam futuristlik kontseptsioon; see on globaalne reaalsus, mis vaikselt koob miljarditest nutiseadmetest koosnevat võrku, mis jälgivad meie keskkonda, automatiseerivad meie kodusid, optimeerivad meie tööstusharusid ja muudavad meie linnad sujuvamaks. Alates nutitermostaadist Seouli kodus kuni põllumajandusandurini maapiirkonna Kenya põllul – need seadmed genereerivad kolossaalse koguse andmeid. Kuid kuidas nad kõik omavahel ja pilvega räägivad, eriti kui nad on sageli väikesed, madala energiatarbega ja töötavad ebausaldusväärsetes võrkudes? Vastus peitub spetsialiseeritud kommunikatsiooniprotokollides.
Kuigi HTTP-protokoll toidab suuremat osa veebist, mida me igapäevaselt kasutame, on see sageli asjade interneti piiratud maailma jaoks liiga raske ja energiamahukas. Siin tulevad mängu masinatevaheliseks (M2M) suhtluseks spetsiaalselt loodud protokollid. Nende seas on üks esile tõusnud domineeriva jõuna: MQTT.
See põhjalik juhend on mõeldud arendajatele, inseneridele ja harrastajatele kogu maailmas, kes soovivad rakendada MQTT võimsust Pythoni, ühe mitmekülgseima ja populaarseima programmeerimiskeele abil asjade interneti valdkonnas. Me teeme teekonna MQTT põhikontseptsioonidest kuni turvaliste, robustsete ja skaleeritavate asjade interneti rakenduste loomiseni.
Mis on MQTT? Piirangutele loodud protokoll
MQTT tähistab Message Queuing Telemetry Transport. Selle leiutasid 1999. aastal dr Andy Stanford-Clark IBM-ist ja Arlen Nipper Arcom-ist (praegu Cirrus Link) naftajuhtmete jälgimiseks ebausaldusväärsete satelliitvõrkude kaudu. Selle algupärane lugu haarab täiuslikult kokku selle eesmärgi: olla kerge, usaldusväärne ja tõhus sõnumiprotokoll seadmetele, mis töötavad oluliste piirangute all.
Avalda/Telli (Pub/Sub) mudel selgitatud
MQTT südames on elegantne avalda/telli arhitektuurimuster. See on põhimõtteline kõrvalekalle HTTP päringu/vastuse mudelist, millega paljud arendajad on tuttavad. Selle asemel, et klient küsib otse serverilt teavet, on side lahti ühendatud.
Kujutlege ülemaailmset uudisteagentuuri. Ajakirjanikud (väljaandjad) ei saada oma lugusid otse igale lugejale. Selle asemel saadavad nad oma lood agentuuri keskusesse (maakler) ja kategoriseerivad need konkreetsete teemade alla, nagu "Maailmapoliitika" või "Tehnoloogia". Lugejad (tellijad) ei pea ajakirjanikelt uuendusi küsima; nad lihtsalt ütlevad agentuurile, millistest teemadest nad huvitatud on. Agentuur edastab seejärel automaatselt kõik uued lood nendel teemadel huvitatud lugejatele. Ajakirjanikud ja lugejad ei pea kunagi teadma üksteise olemasolust, asukohast või staatusest.
MQTT-s eraldab see mudel andmeid saatva seadme (väljaandja) neid vastuvõtvast seadmest või rakendusest (tellija). See on asjade interneti jaoks uskumatult võimas, sest:
- Ruumiline lahutamine: Väljaandja ja tellija ei pea teadma teineteise IP-aadressi ega asukohta.
- Ajaline lahutamine: Nad ei pea samal ajal töötama. Andur saab avaldada näidu ja rakendus saab selle tunde hiljem kätte, kui süsteem on nii disainitud.
- Sünkroniseerimise lahutamine: Mõlema poole toiminguid ei pea peatama, et oodata teist sõnumivahetuse lõpetamist.
MQTT ökosüsteemi põhikomponendid
MQTT arhitektuur on üles ehitatud mõnele põhikomponendile:
- Maakler: Keskne jaotur või server. See on MQTT maailma postkontor. Maakler vastutab kõigi väljaandjate sõnumite vastuvõtmise, nende teemade järgi filtreerimise ja sobivatele tellijatele saatmise eest. Populaarsete maaklerite hulka kuuluvad avatud lähtekoodiga valikud nagu Mosquitto ja VerneMQ ning hallatavad pilveteenused nagu AWS IoT Core, Azure IoT Hub ja Google Cloud IoT Core.
- Klient: Iga seade või rakendus, mis maakleriga ühendub. Klient võib olla väljaandja, tellija või mõlemad. Asjade interneti andur on klient ja serverirakendus, mis töötleb anduriandmeid, on samuti klient.
- Teema: UTF-8 string, mis toimib sõnumite aadressi või sildina. Maakler kasutab teemasid sõnumite suunamiseks. Teemad on hierarhilised, kasutades eraldajatena kaldkriipse, sarnaselt failisüsteemi teekonnale. Näiteks hea teema Londoni hoone elutoa temperatuurianduri jaoks võiks olla:
UK/London/Building-A/Floor-1/LivingRoom/Temperature. - Andmekogum (Payload): See on sõnumi tegelik andmesisu. MQTT on andmeagnostiline, mis tähendab, et andmekogum võib olla mis tahes: lihtne string, täisarv, JSON, XML või isegi krüpteeritud binaarandmed. JSON on selle paindlikkuse ja loetavuse tõttu väga levinud valik.
Miks MQTT domineerib asjade interneti kommunikatsioonis
MQTT disainipõhimõtted muudavad selle erakordselt sobivaks asjade interneti väljakutsetele:
- Kerge: MQTT sõnumitel on väga väike päis (vaid 2 baiti), mis minimeerib võrgu ribalaiuse kasutust. See on kriitilise tähtsusega seadmetele, millel on kallid mobiilipakid või madala ribalaiusega võrgud nagu LoRaWAN.
- Tõhus: Protokolli madal üleüldine kulu tähendab otseselt madalamat energiatarbimist, võimaldades akutoitega seadmetel töötada kuid või isegi aastaid.
- Usaldusväärne: See sisaldab funktsioone sõnumite edastamise tagamiseks isegi ebausaldusväärsete ja suure latentsusega võrkude kaudu. Seda hallatakse teenuse kvaliteedi (QoS) tasemete kaudu.
- Skaleeritav: Üks maakler saab samaaegselt hallata tuhandete või isegi miljonite klientide ühendusi, muutes selle sobivaks suuremahulisteks juurutusteks.
- Kahesuunaline: MQTT võimaldab sidet seadmest pilve (telemeetria) ja pilvest seadmesse (käsud), mis on elutähtis nõue seadmete kaugjuhtimiseks.
Teenuse kvaliteedi (QoS) mõistmine
MQTT pakub kolme teenuse kvaliteedi (QoS) taset, et võimaldada arendajatel valida oma konkreetse kasutusjuhtumi jaoks õige tasakaal töökindluse ja üldkulude vahel.
- QoS 0 (Kõige rohkem üks kord): See on "saada ja unusta" tase. Sõnum saadetakse üks kord, ilma maakleri või lõpliku tellija vastuvõtukinnituseta. See on kiireim meetod, kuid ei paku edastamise garantiid. Kasutusjuht: Mittekriitilised, suure sagedusega anduriandmed, nagu toatemperatuuri näit, mis saadetakse iga 10 sekundi järel. Ühe näidu kaotamine ei ole probleem.
- QoS 1 (Vähemalt üks kord): See tase garanteerib, et sõnum edastatakse vähemalt üks kord. Saatja salvestab sõnumi, kuni saab vastuvõtjalt kinnituse (PUBACK pakett). Kui kinnitust ei saa, saadetakse sõnum uuesti. See võib mõnikord põhjustada sõnumite dubleerimist, kui kinnitus kaob. Kasutusjuht: Käsk nutika tule sisselülitamiseks. Peate olema kindel, et käsk võeti vastu, ja selle kahekordne vastuvõtmine ei tee kahju.
- QoS 2 (Täpselt üks kord): See on kõige usaldusväärsem, kuid ka aeglasim tase. See kasutab neljaastmelist käepigistust tagamaks, et sõnum edastatakse täpselt üks kord, ilma dublikaatideta. Kasutusjuht: Kriitilised toimingud, kus dublikaadid võivad olla katastroofilised, näiteks finantstehing, käsk täpse ravimikoguse väljastamiseks või robotkäe juhtimine tehases.
Pythoni MQTT keskkonna seadistamine
Nüüd, asume praktika juurde. MQTT rakenduste loomiseks Pythoniga vajate kahte asja: Pythoni teeki MQTT kliendi jaoks ja MQTT maaklerit, millega suhelda.
Pythoni MQTT teegi valimine: Paho-MQTT
Kõige laialdasemalt kasutatav ja küpsem MQTT teek Pythoni jaoks on Eclipse Foundationi Paho-MQTT. See on robustne, funktsiooniderikas teek, mis pakub kliendiklassi maakleriga ühenduse loomiseks ning teemade avaldamiseks või tellimiseks. Selle installimine on lihtne, kasutades pip-i, Pythoni paketihaldurit.
Avage oma terminal või käsuviip ja käivitage:
pip install paho-mqtt
See üks käsk installib kõik, mida vajate MQTT klientide kirjutamise alustamiseks Pythonis.
MQTT maakleri seadistamine
Maakleri jaoks on teil mitu võimalust, alates kohaliku masina käitamisest arenduseks kuni võimsa pilveteenuse kasutamiseni tootmises.
- Kohalik maakler (arenduseks ja õppimiseks): Kohaliku maakleri populaarseim valik on Mosquitto, veel üks Eclipse'i projekt. See on kerge, avatud lähtekoodiga ja lihtne installida.
- Debian-põhisel Linuxil (nagu Ubuntu, Raspberry Pi OS):
sudo apt-get update && sudo apt-get install mosquitto mosquitto-clients - macOS-il (kasutades Homebrew'd):
brew install mosquitto - Windowsil: Laadige alla emakeelne installer Mosquitto veebisaidilt.
127.0.0.1võilocalhost). - Debian-põhisel Linuxil (nagu Ubuntu, Raspberry Pi OS):
- Avalik/Pilve maakler (kiireks testimiseks): Esialgseteks katsetusteks ilma midagi installimata saate kasutada tasuta avalikku maaklerit. Kaks populaarset on
test.mosquitto.orgjabroker.hivemq.com. Tähtis: Need on avalikud ja krüpteerimata. Ärge saatke neile tundlikke ega privaatseid andmeid. Need on ainult õppimiseks ja testimiseks.
Praktiline: Avaldamine ja tellimine Pythoniga
Kirjutame oma esimese Pythoni MQTT rakenduse. Loome kaks eraldi skripti: väljaandja, mis saadab sõnumeid, ja tellija, mis neid vastu võtab. Selles näites eeldame, et käitate kohalikku Mosquitto maaklerit.
Lihtsa MQTT väljaandja loomine (publisher.py)
See skript loob ühenduse maakleriga ja avaldab iga kahe sekundi tagant teemale `python/mqtt/test` sõnumi "Tere, MQTT!".
Looge fail nimega `publisher.py` ja lisage järgmine kood:
import paho.mqtt.client as mqtt
import time
# --- Konfiguratsioon ---
BROKER_ADDRESS = "localhost" # Kasuta 'test.mosquitto.org' avaliku maakleri jaoks
PORT = 1883
TOPIC = "python/mqtt/test"
# --- Ühenduse tagasikutse ---
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Ühendatud MQTT maakleriga!")
else:
print(f"Ühendamine ebaõnnestus, tagastuskood {rc}")
# --- Põhiskript ---
# 1. Loo kliendi eksemplar
client = mqtt.Client("PublisherClient")
# 2. Määra on_connect tagasikutse
client.on_connect = on_connect
# 3. Ühendu maakleriga
client.connect(BROKER_ADDRESS, PORT, 60)
# 4. Käivita võrgutsükli jaoks taustalõim
client.loop_start()
try:
count = 0
while True:
count += 1
message = f"Tere, MQTT! Sõnum #{count}"
# 5. Avalda sõnum
result = client.publish(TOPIC, message)
# Kontrolli, kas avaldamine oli edukas
status = result[0]
if status == 0:
print(f"Saadetud `{message}` teemale `{TOPIC}`")
else:
print(f"Sõnumi saatmine teemale {TOPIC} ebaõnnestus")
time.sleep(2)
except KeyboardInterrupt:
print("Avaldamine peatati.")
finally:
# 6. Peata võrgutsükkel ja katkesta ühendus
client.loop_stop()
client.disconnect()
print("Maaklerist lahti ühendatud.")
Lihtsa MQTT tellija loomine (subscriber.py)
See skript loob ühenduse sama maakleriga, tellib teema `python/mqtt/test` ja prindib kõik vastuvõetud sõnumid.
Looge teine fail nimega `subscriber.py`:
import paho.mqtt.client as mqtt
# --- Konfiguratsioon ---
BROKER_ADDRESS = "localhost"
PORT = 1883
TOPIC = "python/mqtt/test"
# --- Tagasikutse funktsioonid ---
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Ühendatud MQTT maakleriga!")
# Telli teema pärast edukat ühendust
client.subscribe(TOPIC)
else:
print(f"Ühendamine ebaõnnestus, tagastuskood {rc}")
def on_message(client, userdata, msg):
# Dekodeeri sõnumi andmekogum baitidelt stringiks
payload = msg.payload.decode()
print(f"Vastuvõetud sõnum: `{payload}` teemal `{msg.topic}`")
# --- Põhiskript ---
# 1. Loo kliendi eksemplar
client = mqtt.Client("SubscriberClient")
# 2. Määra tagasikutsed
client.on_connect = on_connect
client.on_message = on_message
# 3. Ühendu maakleriga
client.connect(BROKER_ADDRESS, PORT, 60)
# 4. Käivita võrgutsükkel (blokeeriv kutse)
# See funktsioon haldab automaatselt uuesti ühendamist ja sõnumite töötlemist.
print("Tellija kuulab...")
client.loop_forever()
Näite käivitamine
- Avage kaks eraldi terminaliakent.
- Esimeses terminalis käivitage tellija skript:
python subscriber.py - Peaksite nägema teadet "Tellija kuulab...". See ootab nüüd sõnumeid.
- Teises terminalis käivitage väljaandja skript:
python publisher.py - Näete, kuidas väljaandja saadab sõnumeid iga kahe sekundi tagant. Samal ajal ilmuvad need sõnumid tellija terminaliaknasse.
Õnnitlused! Olete just loonud täieliku ja töötava MQTT sidesüsteemi Pythoni abil.
Põhitõdedest kaugemale: Paho-MQTT täiustatud funktsioonid
Reaalmaailma asjade interneti süsteemid nõuavad meie lihtsast näitest rohkem robustsust. Vaatame mõningaid täiustatud MQTT funktsioone, mis on tootmiskvaliteediga rakenduste loomiseks hädavajalikud.
Viimane soov ja testament (LWT)
Mis juhtub, kui kriitiline seade, näiteks turvakaamera või südame monitor, ühenduse ootamatult katkestab voolukatkestuse või võrgukao tõttu? LWT funktsioon on MQTT lahendus. Kui klient ühendub, saab ta maaklerile registreerida "viimase soovi" sõnumi. Kui klient ühenduse ebapiisavalt katkestab (saatmata DISCONNECT paketti), avaldab maakler selle viimase soovi sõnumi automaatselt tema nimel määratud teemale.
See on seadme oleku jälgimisel hindamatu. Saate seadme avaldada teemale `devices/device-123/status` sõnumi andmekogumiga "online", ja registreerida LWT sõnumi sama teemaga, kuid andmekogumiga "offline". Iga seda teemat tellinud jälgimisteenus teab koheselt seadme olekut.
LWT rakendamiseks Paho-MQTT-s seadistate selle enne ühendamist:
client.will_set('devices/device-123/status', payload='offline', qos=1, retain=True)
client.connect(BROKER_ADDRESS, PORT, 60)
Säilitatavad sõnumid
Tavaliselt, kui tellija ühendub teemaga, saab ta sõnumeid, mis on avaldatud pärast tellimist. Aga mis siis, kui vajate kõige uuemat väärtust kohe? Selleks on säilitatavad sõnumid. Kui sõnum avaldatakse `retain` lipuga `True` peale, salvestab maakler selle sõnumi selle konkreetse teema jaoks. Iga kord, kui uus klient tellib selle teema, saab ta koheselt viimase säilitatud sõnumi.
See sobib ideaalselt olekuteabe jaoks. Seade saab avaldada oma oleku (nt `{"state": "ON"}`) `retain=True` abil. Iga rakendus, mis käivitub ja tellib, saab koheselt teada seadme praeguse oleku, ilma et peaks ootama järgmist uuendust.
Paho-MQTT-s lisate lihtsalt `retain` lipu oma avaldamiskutsele:
client.publish(TOPIC, payload, qos=1, retain=True)
Püsivad seansid ja puhtad seansid
Kliendi ühendusepäringus olev `clean_session` lipp kontrollib, kuidas maakler kliendi seanssi käsitleb.
- Puhas seanss (
clean_session=True, vaikimisi): Kui klient ühenduse katkestab, viskab maakler kogu teabe selle kohta, sealhulgas selle tellimused ja kõik järjekorras olevad QoS 1 või 2 sõnumid, minema. Kui see uuesti ühendub, on see nagu täiesti uus klient. - Püsiv seanss (
clean_session=False): Kui unikaalse kliendi ID-ga klient sel viisil ühendub, säilitab maakler selle seansi pärast ühenduse katkestamist. See hõlmab selle tellimusi ja kõiki QoS 1 või 2 sõnumeid, mis avaldati selle võrguühenduseta oleku ajal. Kui klient uuesti ühendub, saadab maakler kõik vastamata sõnumid. See on ülioluline ebausaldusväärsetes võrkudes olevate seadmete jaoks, mis ei saa endale lubada kriitiliste käskude kaotamist.
Püsiva seansi loomiseks peate kliendi eksemplari loomisel esitama stabiilse, unikaalse kliendi ID ja määrama `clean_session=False`:
client = mqtt.Client(client_id="my-persistent-device-001", clean_session=False)
Turvalisus ei ole valikuvõimalus: MQTT turvamine Pythoniga
Igas reaalmaailma rakenduses on turvalisus ülimalt oluline. Turvamata MQTT maakler on avatud kutse pahatahtlikele osalejatele teie andmeid pealt kuulata, saata teie seadmetele valesid käske või käivitada teenuse keelamise rünnakuid. MQTT turvamine hõlmab kolme põhisammast: autentimine, krüpteerimine ja autoriseerimine.
Autentimine: Kes sa oled?
Autentimine kontrollib maakleriga ühenduva kliendi identiteeti. Lihtsaim meetod on kasutajanime ja parooli kasutamine. Saate konfigureerida oma Mosquitto maakleri nõudma mandaate ja seejärel pakkuma need oma Pythoni kliendis.
Oma Pythoni kliendis kasutage meetodit `username_pw_set()`:
client.username_pw_set(username="myuser", password="mypassword")
client.connect(BROKER_ADDRESS, PORT, 60)
Krüpteerimine: Andmete kaitsmine edastamisel TLS/SSL-iga
Kasutajanimi ja parool on vähekasulikud, kui need saadetakse võrgu kaudu lihttekstina. Krüpteerimine tagab, et kogu side kliendi ja maakleri vahel on segatud ja loetamatu kõigile, kes võrgus luuravad. See saavutatakse Transport Layer Security (TLS) abil, sama tehnoloogiaga, mis turvab veebisaite (HTTPS).
TLS-i kasutamiseks MQTT-ga (mida sageli nimetatakse MQTTS-iks) peate konfigureerima oma maakleri seda toetama (tavaliselt pordil 8883) ja pakkuma kliendile vajalikud sertifikaadid. See hõlmab tavaliselt sertifitseerimisasutuse (CA) sertifikaati maakleri identiteedi kontrollimiseks.
Paho-MQTT-s kasutate meetodit `tls_set()`:
client.tls_set(ca_certs="path/to/ca.crt")
client.connect(BROKER_ADDRESS, 8883, 60)
Autoriseerimine: Mida teil on lubatud teha?
Kui klient on autentitud, määrab autoriseerimine, mida tal on lubatud teha. Näiteks peaks temperatuurianduril olema lubatud avaldada ainult oma teemale (nt `sensors/temp-A/data`), kuid mitte teemale, mida kasutatakse tehase masinate juhtimiseks (nt `factory/floor-1/robot-arm/command`). Seda hallatakse tavaliselt maakleris juurdepääsukontrolli loendite (ACL-ide) abil. Konfigureerite maakleri reeglitega, mis määravad, millised kasutajad saavad teatud teemamustritele `lugeda` (tellida) või `kirjutada` (avaldada).
Kõik kokku panemine: Lihtne nutikas keskkonnaseire projekt
Ehime veidi realistlikuma projekti nende kontseptsioonide kinnistamiseks. Simuleerime anduriseadet, mis avaldab keskkonnaandmeid JSON-objektina, ja jälgimisrakendust, mis tellib need andmed ja kuvab neid.
Projekti ülevaade
- Andur (väljaandja): Pythoni skript, mis simuleerib temperatuuri ja niiskuse näidu võtvat andurit. See pakib need andmed JSON-andmekogumisse ja avaldab need teemale
smart_env/device01/telemetryiga 5 sekundi järel. - Monitor (tellija): Pythoni skript, mis tellib teema `smart_env/device01/telemetry`, võtab vastu JSON-andmed, parsimine need ja prindib kasutajasõbraliku olekuvärskenduse.
Anduri kood (sensor_publisher.py)
import paho.mqtt.client as mqtt
import time
import json
import random
BROKER_ADDRESS = "localhost"
PORT = 1883
TOPIC = "smart_env/device01/telemetry"
client = mqtt.Client("SensorDevice01")
client.connect(BROKER_ADDRESS, PORT, 60)
client.loop_start()
print("Anduri väljaandja käivitus...")
try:
while True:
# Simuleeri anduri näiteid
temperature = round(random.uniform(20.0, 30.0), 2)
humidity = round(random.uniform(40.0, 60.0), 2)
# Loo JSON andmekogum
payload = {
"timestamp": time.time(),
"temperature": temperature,
"humidity": humidity
}
payload_str = json.dumps(payload)
# Avalda sõnum QoS 1-ga
result = client.publish(TOPIC, payload_str, qos=1)
result.wait_for_publish() # Blokeeri, kuni avaldamine on kinnitatud
print(f"Avaldatud: {payload_str}")
time.sleep(5)
except KeyboardInterrupt:
print("Anduri väljaandja peatamine...")
finally:
client.loop_stop()
client.disconnect()
Jälgimispaneeli kood (monitor_subscriber.py)
import paho.mqtt.client as mqtt
import json
import datetime
BROKER_ADDRESS = "localhost"
PORT = 1883
TOPIC = "smart_env/device01/telemetry"
def on_connect(client, userdata, flags, rc):
print(f"Ühendatud tulemuskoodiga {rc}")
client.subscribe(TOPIC)
def on_message(client, userdata, msg):
print("--- Uus sõnum vastu võetud ---")
try:
# Dekodeeri andmekogumi string ja parsige see JSON-iks
payload = json.loads(msg.payload.decode())
timestamp = datetime.datetime.fromtimestamp(payload.get('timestamp'))
temperature = payload.get('temperature')
humidity = payload.get('humidity')
print(f"Seade: {msg.topic}")
print(f"Aeg: {timestamp.strftime('%Y-%m-%d %H:%M:%S')}")
print(f"Temperatuur: {temperature}°C")
print(f"Niiskus: {humidity}%")
except json.JSONDecodeError:
print("Viga JSON andmekogumi dekodeerimisel.")
except Exception as e:
print(f"Tekkis viga: {e}")
client = mqtt.Client("MonitoringDashboard")
client.on_connect = on_connect
client.on_message = on_message
client.connect(BROKER_ADDRESS, PORT, 60)
print("Jälgimispaneel töötab...")
client.loop_forever()
Prototüübist tootmisse: MQTT parimad praktikad
Projekti liigutamine lihtsast skriptist robustsesse, skaleeritavasse tootmissüsteemi nõuab hoolikat planeerimist. Siin on mõned olulised parimad praktikad:
- Kujundage selge teemahierarhia: Planeerige oma teemastruktuur hoolikalt algusest peale. Hea hierarhia on kirjeldav, skaleeritav ja võimaldab paindlikke tellimusi, kasutades metamärke. Levinud muster on
<site>/<area>/<device_type>/<device_id>/<measurement>. - Käsitle võrgu katkestusi graatsiliselt: Võrgud on ebausaldusväärsed. Teie kliendikood peaks rakendama robustset uuestiühenduse loogikat. The `on_disconnect` tagasikutse Paho-MQTT-s on ideaalne koht selle alustamiseks, rakendades strateegiat nagu eksponentsiaalne tagasilükkamine, et vältida võrgu ülekoormamist uuestiühenduse katsetega.
- Kasutage struktureeritud andmekogumeid: Kasutage oma sõnumi andmekogumite jaoks alati struktureeritud andmevormingut, näiteks JSON-i või Protocol Buffereid. See muudab teie andmed enesekirjeldavaks, versioonitavaks ja erinevatele rakendustele (kirjutatud mis tahes keeles) hõlpsasti parsitavaks.
- Turvake kõik vaikimisi: Ärge juurutage asjade interneti süsteemi ilma turvalisuseta. Minimaalselt kasutage kasutajanime/parooli autentimist ja TLS-krüpteerimist. Kõrgemate turvalisusvajaduste jaoks uurige kliendisertifikaadipõhist autentimist.
- Jälgige oma maaklerit: Tootmiskeskkonnas on teie MQTT maakler kriitilise tähtsusega infrastruktuuri osa. Kasutage jälgimisvahendeid selle seisundi jälgimiseks, sealhulgas protsessori/mälu kasutust, ühendatud klientide arvu, sõnumite kiirust ja kaduma läinud sõnumeid. Paljud maaklerid paljastavad spetsiaalse `$SYS` teemahierarhia, mis pakub seda olekuteavet.
Järeldus: Teie teekond Pythoni ja MQTT-ga
Oleme teinud teekonna MQTT põhimõttelisest "miksist" kuni selle praktilise "kuidas" rakendamiseni Pythoniga. Olete õppinud avalda/telli mudeli võimsusest, QoS-i tähtsusest ja turvalisuse kriitilisest rollist. Olete näinud, kuidas Paho-MQTT teek teeb sensorandmete avaldamiseks ja käskude tellimiseks keerukate klientide loomise märkimisväärselt lihtsaks.
MQTT on rohkem kui lihtsalt protokoll; see on asjade interneti alustehnoloogia. Selle kerge olemus ja robustsed funktsioonid on teinud sellest eelistatud valiku miljonite seadmete jaoks kogu maailmas, alates nutikatest linnadest kuni ühendatud põllumajanduse ja tööstusautomaatikani.
Teekond ei lõpe siin. Järgmine samm on võtta need kontseptsioonid ja rakendada neid reaalsele riistvarale. Eksperimenteerige Raspberry Pi, ESP32 või muude mikrokontrolleritega. Ühendage füüsilised andurid, integreerige pilve IoT platvormidega ja looge rakendusi, mis suhtlevad füüsilise maailmaga. Pythoni ja MQTT abil on teil võimas tööriistakomplekt ühendatud lahenduste järgmise põlvkonna loomiseks.